package com.mjf.design_pattern;

/**
 * 单例模式
 * */

public class SingletonModel {

    public static void main(String[] args) {

        System.out.println(Singleton1.getInstance() == Singleton1.getInstance());
        System.out.println(Singleton2.getInstance() == Singleton2.getInstance());
    }
}

//--饿汉式
class Singleton1 {
    // 1.私有化构造器
    private Singleton1() {
    }

    // 2.内部提供一个当前类的实例
    // 4.此实例也必须静态化
    private static Singleton1 single = new Singleton1();

    // 3.提供公共的静态的方法，返回当前类的对象
    public static Singleton1 getInstance() {
        return single;
    }
}

//--懒汉式：线程不安全
class Singleton2 {
    // 1.私有化构造器
    private Singleton2() {
    }
    // 2.内部提供一个当前类的实例
    // 4.此实例也必须静态化
    private static Singleton2 single;
    // 3.提供公共的静态的方法，返回当前类的对象
    public static synchronized Singleton2 getInstance() {
        if(single == null) {
            single = new Singleton2();
        }
        return single;
    }
}

